// 创建路由对象
import {
  createRouter,
  createWebHistory,
  type RouteLocationNormalized,
} from "vue-router";
import Home from "../pages/Home.vue"; // 适配 xmu-1 路径
import Login from "../pages/Login.vue";
import NotFound from "../pages/404.vue";
import { useStore } from "vuex"; // 新增：引入 Vuex

// 从 Vuex 获取权限的类型（与 xmu-1 项目 store 中的 Permission 一致）
interface Permission {
  _id: string;
  permission_name: string;
  resource: string;
  action: string;
}

// 动态菜单路由（根据 xmu-1 实际权限结构调整）
const menuRoutes = (permissions: Permission[]) =>
  permissions.map((perm) => ({
    name: perm._id,
    path: `${perm.resource}${perm.action}`, // 或根据实际路由规则调整
    component: () => import(`../pages/${perm.resource}${perm.action}.vue`), // 需替换为 xmu-1 中实际的页面组件
    meta: {
      roleName: perm.resource, // 角色关联资源
      menuTitle: perm.permission_name,
      menuIcon: "Document", // 适配 xmu-1 的图标（如 Element Plus 图标）
      isLogin: true,
    },
  }));

const router = createRouter({
  history: createWebHistory(import.meta.env.PROD ?"/dist" : ""),
  routes: [
    {
      name: "login",
      path: "/login",
      component: Login,
    },
    {
      name: "home",
      path: "/home",
      redirect: "/home/Courseread",
      children: [],
      component: Home,
      meta: {
        isLogin: true,
      },
    },
  ],
});

// 获取用户登录后有权限访问的路由（从 Vuex 获取权限）
const getOwnRouters = () => {
  const store = useStore();
  const userPermissions = store.state.userPermissions as Permission[]; // 从 Vuex 获取权限
  return menuRoutes(userPermissions);
};

// 判断用户访问的路由是否已添加
const hasRouter = (to: RouteLocationNormalized) => {
  return router.getRoutes().some((route) => route.path === to.path);// 判断路由是否已添加
};

// 判断是否是用户有权限的路由
const isOwnRouter = (to: RouteLocationNormalized) => {
  const routes = getOwnRouters();// 获取用户有权限的路由
  return routes.some((route) => to.path.includes(route.path));// 判断是否是用户有权限的路由
};

// 导航守卫（适配 xmu-1 的认证逻辑）

router.beforeEach((to, _from, next) => {
  const store = useStore();
  const isLoggedIn = !!store.state.userInfo; // 从 Vuex 判断登录状态

  // 未登录且访问非登录页，跳转登录
  if (!isLoggedIn && to.path !== "/login") {
    next("/login");
    return;
  }

  // 已登录但路由未添加且有权限，动态添加
  if (isLoggedIn && !hasRouter(to) && isOwnRouter(to)) {// isOwnRouter(to) 判断是否是用户有权限的路由
    const ownRoutes = getOwnRouters();// 获取用户有权限的路由
    ownRoutes.forEach((route) => { // 遍历用户有权限的路由
      router.addRoute("home", route); // 添加到 index 路由的子路由
    });
    next({ ...to, replace: true });// 确保路由已添加后继续导航
    return;
  }
  // 无权限且路由不存在，跳转 404
  if (!hasRouter(to) && !isOwnRouter(to)) {
    router.addRoute("index", {
      name: "404",
      path: "/home/404",
      component: NotFound,
    });
    next("/home/404");
    return;
  }

  next();
});

export default router;
